#ifndef INDUSTRIAL_ROBOT_CONTROL_ROBOT_CONTROLLER_H
#define INDUSTRIAL_ROBOT_CONTROL_ROBOT_CONTROLLER_H

#include <memory>
#include <yaml-cpp/yaml.h>

namespace IndustrialRobotControl {
namespace Ethercat {
    class Master;
}

namespace Modbus {
    class ModbusClient;
}

namespace Kinematics {
    class RobotArm;
}

namespace Safety {
    class SafetyMonitor;
}

namespace Visualization {
    class WebServer;
}

class RobotController {
public:
    explicit RobotController(const YAML::Node& config);
    ~RobotController();
    
    // 禁止拷贝
    RobotController(const RobotController&) = delete;
    RobotController& operator=(const RobotController&) = delete;
    
    // 初始化控制器
    bool initialize();
    
    // 关闭控制器
    void shutdown();
    
    // 执行控制周期更新
    void update();
    
private:
    // 更新运动控制
    void update_motion_control();
    
    // 读取Modbus数据
    void read_modbus_data();
    
    // 更新Web服务器数据
    void update_web_data();
    
    const YAML::Node& config_;
    bool is_initialized_;
    
    std::unique_ptr<Ethercat::Master> ethercat_master_;
    std::unique_ptr<Modbus::ModbusClient> modbus_client_;
    std::unique_ptr<Kinematics::RobotArm> robot_arm_;
    std::unique_ptr<Safety::SafetyMonitor> safety_monitor_;
    std::unique_ptr<Visualization::WebServer> web_server_;
};

} // namespace IndustrialRobotControl

#endif // INDUSTRIAL_ROBOT_CONTROLLER_H
